package pruebasUnitarias;

import junit.framework.TestCase;
import tablero.Posicion;
import tablero.Tablero;
import ataques.MinaSimple;
import barco.Direccion;
import barco.Lancha;

public class TableroTest extends TestCase {

    public void testTableroDeberiaColocarElBarcoEnLaPosicionVerticalCorrecta() {
        Posicion unaPosicion = new Posicion(1, 1);
        Posicion otraPosicion = new Posicion(2, 1);
        Lancha lancha = new Lancha(Direccion.ABAJO);
        Tablero tablero = new Tablero();
        tablero.colocarBarcoVertical(unaPosicion, lancha);
        assertTrue(lancha.getPartes().contains(tablero.getCasillero(unaPosicion).getComponentes().get(0)));
        assertTrue(lancha.getPartes().contains(tablero.getCasillero(otraPosicion).getComponentes().get(0)));
    }

    public void testTableroDeberiaColocarElBarcoEnLaPosicionHorizontalCorrecta() {
        Posicion unaPosicion = new Posicion(1, 1);
        Posicion otraPosicion = new Posicion(1, 2);
        Lancha lancha = new Lancha(Direccion.ABAJO);
        Tablero tablero = new Tablero();
        tablero.colocarBarcoHorizontal(unaPosicion, lancha);
        assertTrue(lancha.getPartes().contains(tablero.getCasillero(unaPosicion).getComponentes().get(0)));
        assertTrue(lancha.getPartes().contains(tablero.getCasillero(otraPosicion).getComponentes().get(0)));
    }

    public void testTableroDeberiaMoverLosBarcosDeCasillero() {
        Lancha lancha = new Lancha(Direccion.ABAJO);
        Posicion posicion = new Posicion(1, 1);
        Posicion posicion2 = new Posicion(2, 1);
        Posicion posicion3 = new Posicion(3, 1);
        Tablero tablero = new Tablero();
        tablero.colocarBarcoVertical(posicion, lancha);
        tablero.moverBarcos();
        assertEquals(tablero.getCasillero(posicion).getComponentes().size(), 0);
        assertEquals(tablero.getCasillero(posicion2).getComponentes().size(), 1);
        assertEquals(tablero.getCasillero(posicion3).getComponentes().size(), 1);
    }

    public void testTableroDeberiaActualizarLasMinasYHacerQueExplotenSiEstanListas() {
        Posicion posicion = new Posicion(1, 1);
        Lancha lancha = new Lancha(Direccion.ABAJO);
        Tablero tablero = new Tablero();
        tablero.colocarBarcoVertical(posicion, lancha);
        MinaSimple mina = new MinaSimple(posicion);
        tablero.getCasillero(posicion).recibirMina(mina);
        assertEquals(mina.listaParaExplotar(0), false);
        tablero.actualizarMinas();
        assertEquals(mina.listaParaExplotar(0), false);
        tablero.actualizarMinas();
        assertEquals(mina.listaParaExplotar(0), false);
        tablero.actualizarMinas();
        assertEquals(mina.listaParaExplotar(0), false);
        tablero.actualizarMinas();
        assertEquals(mina.listaParaExplotar(0), true);
        assertEquals(lancha.cantPartesRestantes(), 1);
    }

}
